<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body></body>
  <script>
    /**
     * 合并两个有序数组
     *
     * 解题思路：
     * 1. 双指针法：使用两个指针分别指向两个数组的起始位置
     * 2. 比较两个指针指向的元素，将较小的元素添加到结果数组中，并将对应指针向后移动一位
     * 3. 重复步骤2，直到其中一个数组的所有元素都被添加到结果数组中
     * 4. 将另一个数组中剩余的元素添加到结果数组中
     *
     * 时间复杂度：O(m+n)，其中m和n分别是两个数组的长度
     * 空间复杂度：O(m+n)，需要创建一个新数组来存储合并后的结果
     */
    function mergeSortedArrays(arr1, arr2) {
      const merged = []
      let i = 0,
        j = 0

      // 比较两个数组的元素，将较小的元素添加到结果数组
      while (i < arr1.length && j < arr2.length) {
        if (arr1[i] < arr2[j]) {
          merged.push(arr1[i])
          i++
        } else {
          merged.push(arr2[j])
          j++
        }
      }

      // 将剩余元素添加到结果数组
      while (i < arr1.length) {
        merged.push(arr1[i])
        i++
      }

      while (j < arr2.length) {
        merged.push(arr2[j])
        j++
      }

      return merged
    }

    // 测试用例
    console.log("合并有序数组:", mergeSortedArrays([1, 3, 5], [2, 4, 6])) // [1, 2, 3, 4, 5, 6]
    console.log("合并有序数组:", mergeSortedArrays([1, 2, 3], [4, 5, 6])) // [1, 2, 3, 4, 5, 6]
    console.log("合并有序数组:", mergeSortedArrays([], [1, 2, 3])) // [1, 2, 3]
  </script>
</html>
